package com.teemor.tim.bean.form.openim;

import com.alibaba.fastjson.annotation.JSONField;
import com.teemor.tim.model.message.MessageWrapper;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;

/**
 * @ename zhoulk
 * @cname 周李科
 * @date 2020/12/14 14:33
 */
@NoArgsConstructor
@Data
@ApiModel("消息发送form")
public class SendMsgForm implements Serializable {
    private static final long serialVersionUID = 5767977760329892927L;

    @ApiModelProperty("选填 1：把消息同步到 From_Account 在线终端和漫游上；\n" +
            "2：消息不同步至 From_Account；\n" +
            "若不填写默认情况下会将消息存 From_Account 漫游")
    @JSONField(name = "SyncOtherMachine")
    private Integer SyncOtherMachine;

    @ApiModelProperty("选填 消息发送方 UserID（用于指定发送消息方帐号）")
    @JSONField(name = "From_Account")
    private String FromAccount;

    @ApiModelProperty("消息接收方 UserID")
    @JSONField(name = "To_Account")
    @NotBlank
    private String ToAccount;

    @ApiModelProperty("消息随机数，后台用于同一秒内的消息去重。请确保该字段填的是随机数")
    @JSONField(name = "MsgRandom")
    private Integer MsgRandom;

    @ApiModelProperty("消息时间戳，UNIX 时间戳（单位：秒）")
    @JSONField(name = "MsgTimeStamp")
    private Integer MsgTimeStamp;

    @ApiModelProperty("消息内容，具体格式请参考 消息格式描述（注意，一条消息可包括多种消息元素，MsgBody 为 Array 类型）")
    @JSONField(name = "MsgBody")
    @NotNull
    private List<MessageWrapper> MsgBody;

    @ApiModelProperty("消息离线保存时长（单位：秒），最长为7天（604800秒）\n" +
            "若设置该字段为0，则消息只发在线用户，不保存离线\n" +
            "若设置该字段超过7天（604800秒），仍只保存7天\n" +
            "若不设置该字段，则默认保存7天")
    @JSONField(name = "MsgLifeTime")
    private Integer MsgLifeTime;

    @ApiModelProperty("消息回调禁止开关，只对本条消息有效，" +
            "ForbidBeforeSendMsgCallback 表示禁止发消息前回调，" +
            "ForbidAfterSendMsgCallback 表示禁止发消息后回调")
    @JSONField(name = "ForbidCallbackControl")
    private List<String> ForbidCallbackControl;

}
